package com.itheima.service.impl;

import com.itheima.dao.EmpDao;
import com.itheima.dao.impl.EmpDaoA;
import com.itheima.pojo.Emp;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @ClassName EmpServiceA
 * @Author 16799
 * @Date 2025/10/19 11:11
 * @Version 1.0
 * @Description TODO
 *
 * 弹幕：
 *      就相当于以前方法的传参，但是这是接口定义的方法重写的，没办法传参，那就只能创建实现类对象调用方法，方法的返回值正好是list集合
 *      使用接口很方便，后期改实现类的时候代码不复杂
 *
 **/

@Component      //代表要将当前类交给IOC容器进行管理，成为IOC容器中的bean，这就是控制反转
@Service        //把component注解改为它的衍生注解
//@Primary
public class EmpServiceA implements EmpService {

    //从EmpController粘贴过来后报错，是因为没有拿到这个empList集合，也没有创建这个集合。
    //最终service进行逻辑处理的数据，也就是这个集合数据empList，是需要去调用dao层来获取，所以需要在service当中来调用dao层
    //所以要创建dao层的对象，我们采用面向接口的方式来编程,声明一个接口类型EmpDao,然后去new一个EmpDao的实现类
    //private EmpDao empDao = new EmpDaoA();


/*
①. Service层 及 Dao层的实现类，交给IOC容器管理。要想将这两个类交给ioc容器管理，只需要加上@component就行
②. 为Controller及Service注入运行时，依赖的对象。controller程序运行时需要一个EmpService，而service当中运行需要一个EmpDao
    那IOC容器就需要为其提供这个类型的bean对象，需要在这个成员变量上面加上注解@Autowired
③. 运行测试。
把上面的代码改造，达到因为解耦的目的
*/
    @Autowired  //运行时，IOC容器会提供该类型的bean对象，并赋值给改变量--这就是依赖注入
    private EmpDao empDao;

    @Override
    public List<Emp> listEmp() {
        //1.调用dao层，获取数据
        List<Emp> empList = empDao.listEmp();

        //2. 对数据进行转换处理 - gender, job
        empList.stream().forEach(emp -> {
            //处理 gender 1: 男, 2: 女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            }else if("2".equals(gender)){
                emp.setGender("女");
            }

            //处理job - 1: 讲师, 2: 班主任 , 3: 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            }else if("2".equals(job)){
                emp.setJob("班主任");
            }else if("3".equals(job)){
                emp.setJob("就业指导");
            }
        });

        return empList;
    }
}
